package com.zhentao.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.*;

/***
 * @author
 * @date
 * @apiNote 访问链接：http://localhost:8080/swagger-ui/index.html#/
 */
//@EnableOpenApi
//@Configuration
//public class Swagger2Config {
//
//    @Value("${spring.application.name}")
//    private String PROJECT_NAME;
//
//    /**
//     * 配置基本信息
//     *
//     * @return
//     */
//    @Bean
//    public ApiInfo apiInfo() {
//        return new ApiInfoBuilder()
//                .title(PROJECT_NAME)
//                .description("swagger test app restful api")
//                .termsOfServiceUrl("http://localhost")
//                .contact(new Contact("SSM", "http://localhost", "xxxx@gmail.com"))
//                .version("1.0")
//                .build();
//    }
//
//    /**
//     * 配置文档生成最佳实践
//     *
//     * @param apiInfo
//     * @return
//     */
//    @Bean
//    public Docket createRestApi(ApiInfo apiInfo) {
//        return new Docket(DocumentationType.OAS_30)
//                .apiInfo(apiInfo)
//                .groupName("YX")
//                .select()
//                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
//                .paths(PathSelectors.any())
//                .build()
//                //添加token的参数
//                .securityContexts(securityContexts())
//                .securitySchemes(securitySchemes());
//
//    }
//
//    /* ↓↓↓↓ 解决swagger3.0 head传参失效的问题 ↓↓↓↓ */
//    private List<SecurityScheme> securitySchemes() {
//        List<SecurityScheme> securitySchemes = new ArrayList<>();
//        securitySchemes.add(new ApiKey("Authorization", "Authorization", "header"));
//        securitySchemes.add(new ApiKey("Accept-Language", "Accept-Language", "header"));
//        return securitySchemes;
//    }
//
//    private List<SecurityContext> securityContexts() {
//        List<SecurityContext> securityContexts = new ArrayList<>();
//        securityContexts.add(SecurityContext.builder()
//                .securityReferences(defaultAuth())
//                .forPaths(PathSelectors.regex("^(?!auth).*$")).build());
//        return securityContexts;
//    }
//
//    private List<SecurityReference> defaultAuth() {
//        AuthorizationScope authorizationScope1 = new AuthorizationScope("global", "token");
//        AuthorizationScope[] authorizationScopes1 = new AuthorizationScope[1];
//        authorizationScopes1[0] = authorizationScope1;
//
//        AuthorizationScope authorizationScope2 = new AuthorizationScope("global", "language");
//        AuthorizationScope[] authorizationScopes2 = new AuthorizationScope[1];
//        authorizationScopes2[0] = authorizationScope2;
//
//        List<SecurityReference> securityReferences = new ArrayList<>();
//        securityReferences.add(new SecurityReference("Authorization", authorizationScopes1));
//        securityReferences.add(new SecurityReference("Accept-Language", authorizationScopes2));
//        return securityReferences;
//    }
//    /* ↑↑↑↑ 解决swagger3.0 head传参失效的问题 ↑↑↑↑ */
//
//    @SafeVarargs
//    private final <T> Set<T> hashSet(T... ts) {
//        if (ts.length > 0) {
//            return new LinkedHashSet<>(Arrays.asList(ts));
//        }
//        return null;
//    }
//
//}
